package com.phenix.mvp.base.multitype;

import android.content.Context;
import android.support.annotation.NonNull;

import java.util.ArrayList;
import java.util.Map;

/**
 * @author  zhouphenix on 2017-1-8.
 */

public interface TypePool {
    void register(@NonNull Context context, @NonNull Class<? extends BaseViewHolder>... clazzs);
    void unregister(@NonNull Class<? extends BaseViewHolder> clazz);

    /**
     * ViewHolder的类型索引
     * @param clazz  数据的class
     * @return >=0:正确类型数据； <0可以定义错误或失败的view数据
     */
    int indexOf(@NonNull Class<?> clazz);

    Class<?> getItemTypeByViewHolder(@NonNull Class<? extends BaseViewHolder> clazz);

    Class<? extends BaseViewHolder> getViewHolderByType(int type);
    Class<? extends BaseViewHolder> getViewHolderByClass(Class<?> itemClass);

    ArrayList<Class<? extends BaseViewHolder>> getViewHolders();
    /**
     * 设置tag
     * @param clazz
     * @param tags tag的key必须是R文件中生成int类型
     */
    void setTag(@NonNull Class<? extends BaseViewHolder> clazz, Map<Integer, Object> tags);
    Map<Integer, Object> getTag(@NonNull Class<? extends BaseViewHolder> clazz);
}
